package tag32_25_08.set;

import java.util.HashSet;

class Blume {
	String name;
	int farbe;

	public Blume(String name, int farbe) {
		this.name = name;
		this.farbe = farbe;
	}

	// public String toString() {
	// return "Blume [name=" + name + ", farbe=" + farbe + "]";
	// }

	public String toString() {
		return name + " (" + farbe + ")";
	}

	// 1. Zwei Objekte mit demselben Inhalt sollten denselben HashCode haben
	// 2. Faustregel: Berechnet den HashCode aus den Attributen, die in der equals vergliechen werden
	public int hashCode() {
		return 7; // Korrekt, aber nicht sinnvoll
	}
	
	//1. equals vergleicht die Inhalte der Objekte
	public boolean equals(Object obj){
		
		if( !(obj instanceof Blume) ){
			return false;
		}
		
		Blume b2 = (Blume) obj;
		return name.equals(b2.name) && farbe == b2.farbe;
		
	}
	
//	public boolean equals(Blume b2){
//		return name.equals(b2.name) && farbe == b2.farbe;
//	}
	
}

public class Set03_HashSet_equals_hashCode {

	public static void main(String[] args) {

		HashSet<Blume> set = new HashSet<Blume>();

		Blume b1 = new Blume("Rose", 1); // hash-code: 1 2
		set.add(b1);
		System.out.println(set);

		// b1.hashCode(); //366712642

		
		System.out.println("----------------------------");
		// set.add(b1);
		set.add(new Blume("Rose", 1)); // hash-code: 1 2

		System.out.println("size: " + set.size());
		System.out.println(set);

		
		Blume b2 = new Blume("Rose", 1);
		System.out.println(b1.equals(b2)); // true
		Object o1 = b1;
		System.out.println(o1.equals(b2)); // false
		
	} // end of main

}
